#include <stdio.h>
#include <stdlib.h>

// 数组的每个下标作为一个阶梯，第i个阶梯对应着一个非负数的体力花费值 cost[i](下标从0开始)。
// 每当爬上一个阶梯都要花费对应的体力值，一旦支付了相应的体力值，就可以选择向上爬一个阶梯或者爬两个阶梯。
// 请找出达到楼层顶部的最低花费。在开始时，你可以选择从下标为0或1的元素作为初始阶梯。

int main(){
    int cost[] = {2,1,4,4,5};
    int n = sizeof(cost)/sizeof(cost[0]);
    int *dp = (int*)malloc((n+1)*sizeof(int));
    dp[0] = dp[1] = 0;
    for(int i=2;i<=n;i++){
        int f1 = cost[i-2]+dp[i-1];
        int f2 = cost[i-3]+dp[i-2];
        dp[i] = f1<f2?f1:f2; 
    }
    printf("%d",dp[n]);

    return 0;
}